<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="W7pDZ" id="W7pDZ"><span data-lake-id="ub68ac614" id="ub68ac614">典型回答</span></h1>
  <p data-lake-id="u33c71fa3" id="u33c71fa3"><br></p>
  <p data-lake-id="u6ed2ddad" id="u6ed2ddad"><span data-lake-id="u27e7cb99" id="u27e7cb99">PageHelper是MyBatis中提供的分页插件，主要是用来做物理分页的。</span></p>
  <p data-lake-id="udece62d9" id="udece62d9"><span data-lake-id="ub83e7727" id="ub83e7727">​</span><br></p>
  <p data-lake-id="ua4b08618" id="ua4b08618"><span data-lake-id="u5611fe79" id="u5611fe79">当我们在代码中使用</span><code data-lake-id="u0bbeb755" id="u0bbeb755"><span data-lake-id="ud286aa08" id="ud286aa08">PageHelper.startPage(int pageNum, int pageSize)</span></code><span data-lake-id="u9c064679" id="u9c064679">设置分页参数之后，其实PageHelper会把他们存储到ThreadLocal中。</span></p>
  <p data-lake-id="u2c481d22" id="u2c481d22"><span data-lake-id="u41ea3067" id="u41ea3067">​</span><br></p>
  <p data-lake-id="ub05b73ae" id="ub05b73ae"><span data-lake-id="ub9364ce5" id="ub9364ce5">PageHelper会在执行器的query方法执行之前，会从ThreadLocal中再获取分页参数信息，页码和页大小，然后执行分页算法，计算需要返回的数据块的起始位置和大小。最后，</span><strong><span data-lake-id="uc37b44cb" id="uc37b44cb">PageHelper会通过修改SQL语句的方式，在SQL后面动态拼接上limit语句</span></strong><span data-lake-id="u952280de" id="u952280de">，限定查询的数据范围，从而实现物理分页的效果。并且在查询结束后再清除ThreadLocal中的分页参数。</span></p>
 </body>
</html>